<?php


namespace app\admin\model;

class ComponentExceptionInfoRe extends Base
{
    /**
     * Desc: 向计划部门发送的异常信息，提示生成部件生产信息
     * $component_id 部件id
     * $reset_num 重置数量
     * $repair_num 修复数量
     * User: 苏鹏
     * Date: 2023/11/13
     * Time: 9:50
     * @return void
     */
    public function getToPlanNoticeContent(int $id, int $component_id, int $reset_num, int $repair_num)
    {
        //查询部件
        $comp_result = Component::where('id', '=', $component_id)->where('status', '=', 1)->field('component_type,drawing_no,drawing_name,projects_order_id')->find();
        if(empty($comp_result))
        {
            re_error_json(msg_code(30)); //部件信息不存在！
        }else{
            $comp_result = $comp_result->toArray();
        }
        //查询项目订单名称

        $order_result = ProjectsOrder::where('id', '=', $comp_result['projects_order_id'])->where('status', '=', 1)->field('proj_id,name')->find();

        //查询项目名称
        $projects_name = Projects::where('id', '=', $order_result['proj_id'])->where('status', '=', 1)->value('title');
        $domain = get_config_cache('domain')['admin_domain'].'/admin/compExcep/creaCompInfo?id='.$id;
        //拼接模板信息
        $html =
<<<HTML
项目名称：$projects_name 项目订单名称：$order_result[name] 部件图名：$comp_result[drawing_name] 部件图号：$comp_result[drawing_no] <br>
异常信息：重置数量：$reset_num, 修复数量：$repair_num <br/>
根据异常信息中的数量，生成各自重置或修复数量的生产信息，信息中会标识类型重置或修复。如上信息，会生成一条新的部件信息，数量：$reset_num ，异常类型：重置的部件信息；数量：$repair_num ，异常类型：修复的部件信息。
<a target=“_blank” href="$domain"> 根据异常信息一键生成生产信息</a>
HTML;
        return $html;
    }

    /**
     * Desc: 生成生产计划
     * User: 苏鹏
     * Date: 2023/11/13
     * Time: 15:51
     * @return void
     */
    public function createProductionPlan(int $id)
    {
        if(empty($id))
        {
            return msg_code(500); //失败
        }
        //查询异常记录信息
        $result = $this->where('id', '=', $id)->field('model_id,content,exception_status')->find();
        if(empty($result))
        {
            return msg_code(500); //失败
        }
        //异常已处理
        if($result['exception_status'] == 2)
        {
            return msg_code(32); //异常提示已处理！
        }
        $this->where('id', '=', $id)->update(['exception_status'=>2]);
        $result = $result->toArray();
        $result['content'] = json_decode($result['content'], true);

        //查询部件信息，并生成生产计划
        $comp_result = Component::where('status', '=', 1)->where('id', $result['model_id'])->field('component_type,drawing_no,drawing_name,material,weight,colour,processes_type,drawing_img,notes,ask,projects_order_id,pid')->find();
        if(empty($comp_result))
        {
            return msg_code(500); //失败
        }
        $comp_result = $comp_result->toArray();
        //重置
        if(!empty($result['content']['reset_num']))
        {
            $comp_result['number'] = $result['content']['reset_num'];
            $comp_result['exception_type'] = 1;
        }

        Component::create($comp_result);
        //修复
        if(!empty($result['content']['repair_num']))
        {
            $comp_result['number'] = $result['content']['repair_num'];
            $comp_result['exception_type'] = 2;
        }

        Component::create($comp_result);
        return msg_code(31); //生产计划已生成！
    }


    /**
     * @param string $model 模块名称
     * @param int $model_id 模块id
     * @param bool $re_content 是否返回数据
     * Desc: 当前部件的子级是否含有异常（重置 修复）信息
     * User: 苏鹏
     * Date: 2023-11-16 13:22
     *
     */
    public function isException(string $model, int $model_id, bool $re_content = false)
    {
        $result =$this->where('model','=', $model)->where('model_id', '=', $model_id)->field('id,content')->where('is_main', '=', 2)->find();

        if(!empty($result))
        {
            $result = $result->toArray();
            if($re_content)
            {
                return $result;
            }else{
                return true;
            }
        }
        return false;
    }

    /**
     * @param string $model
     * @param int $model_id
     * @param bool $re_content
     * Desc: 当前部件是否含有异常（重置或修复）信息
     * User: 苏鹏
     * Date: 2023-11-16 15:09
     * @return void
     */
    public function isSelfException(string $model, int $model_id, bool $re_content = false)
    {
        $result =$this->where('model','=', $model)->where('model_id', '=', $model_id)->where('is_main', '=', 1)->field('id,content')->find();
        if(!empty($result))
        {
            $result = $result->toArray();
            if($re_content)
            {
                return $result;
            }else{
                return true;
            }
        }
        return false;
    }
}